
// 导入api
import {
  getVideo
} from '../../../request/index'

const utils = require('../../../utils/util')
const ad = require('../../../utils/ad')

// 解释网络地址
function getUrl(text) {
  let regExp = /(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w.-]*)*\/?/
  if (regExp.test(text)) {
    let arr = regExp.exec(text);
    return arr[0];
  } else {
    wx.showToast({
      title: '粘贴的文本格式不正确~',
      icon: 'none'
    })
  }
}
Page({

  /**
   * 页面的初始数据
   */
  data: {
    is_history: false,
    is_fill: false,
    text: '',
    videoUrl: "", //视频路径
    imgUrl: "", //图片路径
    isShowVideo: false,
    historys: [],
    isShow2: false,
    copyText:"",
    isShowCopy: false,
  },
  // 点击粘贴
  // 获取剪贴板内容
  getClipboard() {
    wx.getClipboardData({
      success: (res) => {
        this.setData({
          text: res.data || '（空内容）'
        })
        // wx.showToast({
        //   title: '粘贴成功',
        //   icon: 'success'
        // })
      },
      fail: (err) => {
        console.error('获取剪贴板失败:', err)
        wx.showToast({
          title: '获取失败',
          icon: 'none'
        })
      }
    })
  },
  // 清空输入域
  emptyInput() {
    this.setData({
      text: ''
    })
  },
  // 历史记录
  switchHistoryChange(e) {
    console.log(`携带值为`, e.detail.value)
    this.setData({
      is_history: e.detail.value
    })
    wx.setStorageSync('IS_HISTORY', e.detail.value)
  },
  // 自动填充
  switchFillChange(e) {
    // console.log(`携带值为`, e.detail.value)
    this.setData({
      is_fill: e.detail.value
    })
    // 把用户的选择存储在本地空间
    wx.setStorageSync('IS_FILL', e.detail.value)
  },

  // 获取输入的值
  addTextArea(e) {
    let text = e.detail.value;
    this.setData({
      text
    })
  },
  // 解析网址
  async parseUrl() {
    let text = this.data.text;
    let url = getUrl(text);
    this.setData({
      text: url
    })
    // 显示loading
    wx.showLoading({
      title: '正在解析',
    })
    // 提起无水印的视频
    await getVideo({
        url
      })
      .then(
        content => {
          console.log("后台数据:", content);
          if (content.code == 200) {
            let url = content.data.url
            let cover = content.data.cover
            
            this.setData({
              videoUrl: url,
              copyText: url,
              isShowVideo: true,
              imgUrl: cover
            })
            if (this.data.is_history) {
              let historys = this.data.historys;
              let datetime = utils.formatTime(new Date())
              let obj = {
                videoUrl: url,
                imgUrl: cover,
                datetime: datetime
              }
              historys.unshift(obj);
              wx.setStorageSync('HISTORYARRAY', historys)
              this.setData({
                historys: historys
              })
            }
          }
          wx.showToast({
            title: content.msg,
            icon: 'none'
          })
        }
      )
      .catch(err => console.log(err))

    // 隐藏loading
    wx.hideLoading();
  },
  // 点击重新操作
  restartFn() {
    this.setData({
      isShowVideo: false
    })
  },
  // 点击切换历史数据
  downLoadHistory(event) {
    let imgUrl = event.currentTarget.dataset.img;
    let videoUrl = event.currentTarget.dataset.url;
    this.setData({
      imgUrl,
      videoUrl,
      copyText:videoUrl,
      isShowVideo: true
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 是否打开自动粘贴功能
    let is_fill = wx.getStorageSync('IS_FILL')
    if (is_fill) {
      this.setData({
        is_fill: is_fill
      })
    }

    // 设置是否存储解析记录
    let is_history = wx.getStorageSync('IS_HISTORY')
    if (is_history) {
      this.setData({
        is_history: is_history
      })
    }

    // 先判断用户是否已经有存储的数据
    this.initHistorys();

    // 初始化广告
    ad.initVideoAd(()=>{
         // 广告观看完毕，下载视频
        //  this.downloadVideo()
         this.setData({isShowCopy: true})
    })
  },
  initHistorys() {
    let historys = wx.getStorageSync('HISTORYARRAY')
    if (historys) {
      this.setData({
        historys: historys
      })
    }
  },
  // 用户打开页面就执行这个回调函数
  onShow() {
    // 显示界面就执行
    if (this.data.is_fill) {
      this.getClipboard();
    }
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },
  onPlay(e) {
    // console.log('视频开始播放', e)
    this.setData({
      isPlaying: true
    })
  },

  onPause(e) {
    // console.log('视频暂停', e)
    this.setData({
      isPlaying: false
    })
  },

  onEnded(e) {
    // console.log('视频播放结束', e)
    this.setData({
      isPlaying: false
    })
  },

  onError(e) {
    // console.error('视频播放错误', e.detail.errMsg)
    wx.showToast({
      title: '播放出错',
      icon: 'none'
    })
  },

  togglePlay() {
    const videoCtx = wx.createVideoContext('myVideo')
    this.data.isPlaying ? videoCtx.pause() : videoCtx.play()
  },

  // 获取视频信息
  getVideoInfo() {
    const videoCtx = wx.createVideoContext('myVideo')
    videoCtx.requestFullScreen() // 全屏播放

    // 监听时间更新
    videoCtx.onTimeUpdate((res) => {
      this.setData({
        currentTime: res.detail.currentTime,
        duration: res.detail.duration
      })
    })
  },
  // 显示广告，观看完成可以领取资料的方法
  showVideoAdFn() {
    try {
      // 用户触发广告后，显示激励视频广告
      if (videoAd) {
        videoAd.show().catch(() => {
          // 失败重试
          videoAd.load()
            .then(() => {
              videoAd.show()
            })
            .catch(err => {
              console.error('激励视频 广告显示失败', err)
            })
        })
      }
    } catch (e) {
      console.log(e)
    }
  },
  // 下载视频的方法
  downloadVideo() {
    let videoUrl = this.data.videoUrl;
    //console.log({videoUrl})
    // 先检查用户是否授权
    wx.getSetting({
      success(res) {
        if (!res.authSetting['scope.writePhotosAlbum']) {
          // 未授权，先请求授权
          console.log('未授权，先请求授权')
          wx.authorize({
            scope: 'scope.writePhotosAlbum',
            success() {
              // 授权成功，开始下载
              startDownload(videoUrl)
            },
            fail() {
              // 授权失败，提示用户
              wx.showModal({
                title: '提示',
                content: '需要您授权保存到相册',
                success(res) {
                  if (res.confirm) {
                    wx.openSetting() // 打开设置页面
                  }
                }
              })
            }
          })
        } else {
          // 已授权，直接下载
          console.log('已授权，直接下载')
          startDownload(videoUrl)
        }
      }
    })
  },
  // 复制下载地址
  copyDownLoadUrl(){
    utils.copyAction(this.data.copyText)
  },
  // 下载视频之前
  downloadVideoBefore() {
      // 观看观看
      ad.showVideoAd();
  },
  // 保存图片按钮点击事件
  onSaveImage() {
    this.checkPermissionAndSave(this.data.imgUrl);
  },

  // 检查权限并保存
  checkPermissionAndSave(imageUrl) {
    wx.getSetting({
      success(res) {
        if (res.authSetting['scope.writePhotosAlbum']) {
          // 已有权限，直接保存
          downloadAndSaveImage(imageUrl);
        } else {
          // 请求权限
          wx.authorize({
            scope: 'scope.writePhotosAlbum',
            success() {
              // 授权成功
              downloadAndSaveImage(imageUrl);
            },
            fail() {
              // 授权失败
              handleSaveError({
                errMsg: 'auth deny'
              });
            }
          });
        }
      },
      fail(err) {
        console.error('获取设置失败:', err);
      }
    });
  }
})


// 下载保存视频
function startDownload(url = '') {
  wx.showLoading({
    title: '下载中...',
    mask: true
  })

  wx.downloadFile({
    url: url,
    success(res) {
      wx.hideLoading()
      if (res.statusCode === 200) {
        // 保存视频
        saveVideoToAlbum(res.tempFilePath)
      }
    },
    fail(err) {
      wx.hideLoading()
      console.error('下载失败', err)
      wx.showToast({
        title: '下载失败',
        icon: 'none'
      })
    },
    complete(){
      wx.hideLoading()
    }
  })
}
// 保存视频到相册
function saveVideoToAlbum(tempFilePath) {
  wx.saveVideoToPhotosAlbum({
    filePath: tempFilePath,
    success(res) {
      console.log('保存成功', res)
      wx.showToast({
        title: '已保存到相册',
        icon: 'success'
      })
    },
    fail(err) {
      console.error('保存失败', err)
      if (err.errMsg.includes('auth deny')) {
        wx.showModal({
          title: '提示',
          content: '需要您授权保存到相册',
          success(res) {
            if (res.confirm) {
              wx.openSetting()
            }
          }
        })
      } else {
        wx.showToast({
          title: '保存失败',
          icon: 'none'
        })
      }
    }
  })
}

// 下载封面
// 下载图片并保存到相册
function downloadAndSaveImage(imageUrl) {
  wx.showLoading({
    title: '下载中...',
    mask: true
  });

  // 第一步：下载图片
  wx.downloadFile({
    url: imageUrl,
    success(res) {
      if (res.statusCode === 200) {
        // 第二步：保存到相册
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success() {
            wx.hideLoading();
            wx.showToast({
              title: '保存成功',
              icon: 'success'
            });
          },
          fail(err) {
            wx.hideLoading();
            handleSaveError(err);
          }
        });
      }
    },
    fail(err) {
      wx.hideLoading();
      wx.showToast({
        title: '下载失败',
        icon: 'none'
      });
      console.error('下载失败:', err);
    }
  });
}

// 处理保存失败的情况（特别是权限问题）
function handleSaveError(err) {
  console.error('保存失败:', err);

  if (err.errMsg.includes('auth deny') || err.errMsg.includes('auth denied')) {
    wx.showModal({
      title: '提示',
      content: '需要您授权访问相册才能保存图片',
      confirmText: '去设置',
      success(res) {
        if (res.confirm) {
          // 打开设置页面
          wx.openSetting();
        }
      }
    });
  } else {
    wx.showToast({
      title: '保存失败',
      icon: 'none'
    });
  }
}